#include <iostream>

// decltype：用来推表达式

auto func()
{
    std::cout << "func" << std::endl;
    return "hello";
}

template<typename T1, typename T2>
auto add(T1 a, T2 b)->decltype(a + b) // 11 打的补丁
{
    return a + b;
}

int main()
{
#if 0
    // 在编译器进行推导，不会调用函数
    // 推导可以不需要初始化对象
    decltype(func()) a;
#endif

#if 0
    const int &i = 0;
    // 能推const和引用
    decltype(i) b = i;
#endif

#if 0
    int a = 10;
    int b = 20;

    // 推导右值推变量
    // decltype(右值) = 变量
    decltype(a + b) c = a;

    // 推导左值推引用
    // decltype(左值) = 引用
    decltype(a += b) c = a;
#endif

#if 1

#endif
    return 0;
}